// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (C) 2014 Claudio Leite <leitec@staticky.com>
 *
 */

/dts-v1/;

#include "kirkwood.dtsi"
#include "kirkwood-6281.dtsi"

/ {
	model = "D-Link DIR-665";
	compatible = "dlink,dir-665", "marvell,kirkwood-88f6281", "marvell,kirkwood";

	memory {
		device_type = "memory";
		reg = <0x00000000 0x8000000>; /* 128 MB */
	};

	chosen {
		bootargs = "console=ttyS0,115200n8 earlyprintk";
		stdout-path = &uart0;
	};

	ocp@f1000000 {
		pinctrl: pin-controller@10000 {
			pinctrl-0 =< &pmx_led_usb
				     &pmx_led_internet_blue
				     &pmx_led_internet_amber
				     &pmx_led_5g &pmx_led_status_blue
				     &pmx_led_wps &pmx_led_status_amber
				     &pmx_led_24g
				     &pmx_btn_restart &pmx_btn_wps>;
			pinctrl-names = "default";

			pmx_led_usb: pmx-led-usb {
				marvell,pins = "mpp12";
				marvell,function = "gpio";
			};
			pmx_led_internet_blue: pmx-led-internet-blue {
				marvell,pins = "mpp42";
				marvell,function = "gpio";
			};
			pmx_led_internet_amber: pmx-led-internet-amber {
				marvell,pins = "mpp43";
				marvell,function = "gpio";
			};
			pmx_led_5g: pmx-led-5g {
				marvell,pins = "mpp44";
				marvell,function = "gpio";
			};
			pmx_led_status_blue: pmx-led-status-blue {
				marvell,pins = "mpp45";
				marvell,function = "gpio";
			};
			pmx_led_wps: pmx-led-wps {
				marvell,pins = "mpp47";
				marvell,function = "gpio";
			};
			pmx_led_status_amber: pmx-led-status-amber {
				marvell,pins = "mpp48";
				marvell,function = "gpio";
			};
			pmx_led_24g: pmx-led-24g {
				marvell,pins = "mpp49";
				marvell,function = "gpio";
			};
			pmx_btn_restart: pmx-btn-restart {
				marvell,pins = "mpp28";
				marvell,function = "gpio";
			};
			pmx_btn_wps: pmx-btn-wps {
				marvell,pins = "mpp46";
				marvell,function = "gpio";
			};
		};

		spi@10600 {
			status = "okay";
			m25p80@0 {
				#address-cells = <1>;
				#size-cells = <1>;
				compatible = "mxicy,mx25l12805d", "jedec,spi-nor";
				spi-max-frequency = <50000000>;
				reg = <0>;

				partition@0 {
					label = "uboot";
					reg = <0x0 0x30000>;
					read-only;
				};

				partition@30000 {
					label = "nvram";
					reg = <0x30000 0x10000>;
					read-only;
				};

				partition@40000 {
					label = "kernel";
					reg = <0x40000 0x180000>;
				};

				partition@1c0000 {
					label = "rootfs";
					reg = <0x1c0000 0xe00000>;
				};

				cal_data: partition@fc0000 {
					label = "cal_data";
					reg = <0xfc0000 0x10000>;
					read-only;
				};

				partition@fd0000 {
					label = "lang_pack";
					reg = <0xfd0000 0x30000>;
					read-only;
				};
			};
		};

		serial@12000 {
			status = "okay";
		};

		i2c@11000 {
			status = "okay";
		};

		ehci@50000 {
			status = "okay";
		};
	};

	gpio-leds {
		compatible = "gpio-leds";

		blue-usb {
			label = "dir665:blue:usb";
			gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
		};
		blue-internet {
			/* Can only be turned on if the Internet
			 * Ethernet port has Link
			 */
			label = "dir665:blue:internet";
			gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
		};
		amber-internet {
			label = "dir665:amber:internet";
			gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;
		};
		blue-wifi5g {
			label = "dir665:blue:5g";
			gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
		};
		blue-status {
			label = "dir665:blue:status";
			gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;
		};
		blue-wps {
			label = "dir665:blue:wps";
			gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>;
		};
		amber-status {
			label = "dir665:amber:status";
			gpios = <&gpio1 16 GPIO_ACTIVE_HIGH>;
		};
		blue-24g {
			label = "dir665:blue:24g";
			gpios = <&gpio1 17 GPIO_ACTIVE_LOW>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;

		reset {
			label = "reset";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio0 28 GPIO_ACTIVE_LOW>;
		};
		wps {
			label = "wps";
			linux,code = <KEY_WPS_BUTTON>;
			gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
		};
	};

	dsa {
		status = "disabled";

		compatible = "marvell,dsa";
		#address-cells = <2>;
		#size-cells = <0>;

		dsa,ethernet = <&eth0port>;
		dsa,mii-bus = <&mdio>;

		switch@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0 0>;	/* MDIO address 0, switch 0 in tree */

			port@0 {
				reg = <0>;
				label = "lan4";
			};

			port@1 {
			       reg = <1>;
			       label = "lan3";
			};

			port@2 {
			       reg = <2>;
			       label = "lan2";
			};

			port@3 {
			       reg = <3>;
			       label = "lan1";
			};

			port@4 {
				reg = <4>;
				label = "wan";
			};

			port@6 {
			       reg = <6>;
			       label = "cpu";
			};
		};
	};
};

&mdio {
	status = "okay";

	switch@0 {
		compatible = "marvell,mv88e6085";
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0>;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;
				label = "lan4";
			};

			port@1 {
			       reg = <1>;
			       label = "lan3";
			};

			port@2 {
			       reg = <2>;
			       label = "lan2";
			};

			port@3 {
			       reg = <3>;
			       label = "lan1";
			};

			port@4 {
				reg = <4>;
				label = "wan";
			};

			port@6 {
				reg = <6>;
				label = "cpu";
				ethernet = <&eth0port>;
				fixed-link {
					speed = <1000>;
					full-duplex;
				};
			};
		};
	};
};

/* eth0 is connected to a Marvell 88E6171 switch, without a PHY. So set
 * fixed speed and duplex. */
&eth0 {
	status = "okay";

	ethernet0-port@0 {
		speed = <1000>;
		duplex = <1>;
	};
};

/* eth1 is connected to the switch as well. However DSA only supports a
 * single CPU port. So leave this port disabled to avoid confusion. */

&eth1 {
	status = "disabled";
};

/* There is no battery on the boards, so the RTC does not keep time
 * when there is no power, making it useless. */
&rtc {
	status = "disabled";
};

&pciec {
        status = "okay";
};

&pcie0 {
	status = "okay";
};
